//TypeError: Item.loadAllItems is not a function 错误待解决

const printInventory = require('../main/main.js');
const Item= require('../main/datbase.js');
//const定义的变量不可以修改，而且必须初始化

//条形码
function obj(inputs){
    let obj = {};
    for(let item of inputs){
        if(item.length !== 10){
            let arr = item.split('-');
            if(!obj[arr[0]]){
                obj[arr[0]] = arr[1] ;
            }else{
                obj[arr[0]] += arr[1] ;
            }
        }else{
            if(!obj[item]){
                obj[item] = 1 ;
            }else{
                obj[item] ++ ;
            }   
        }
    }
    return obj ;
}

//优惠商品和数量
function obj_promotions(obj_in,promotions){
    let obj = {} ;
    for(let key in obj_in){
        if(promotions.indexOf(key) !== -1){
            obj[key] = parseInt(obj_in[key]/3) ;
        }
    }
    return obj ;
}

//小票
function str_shop(obj_in,allItems,obj_promotion){
    let str_pay = '' ;
    let str_pro = '' ;
    let str_arr = [] ;
    let pay = 0;      //实付额
    let pro_pay = 0 ; //优惠额
    for(let key in obj_in){
        for(let item of allItems){
            if(item.barcode === key){
                if(obj_promotion[key]){
                    //优惠商品
                    str_pro += `名称：${item.name}，数量：${obj_promotion[key]}${item.unit}\n` ;
                    let onefree_price= item.price * (obj_in[key] - obj_promotion[key]) ;
                    pay += onefree_price ;
                    pro_pay += item.price * obj_promotion[key] ;
                    str_pay +=  `名称：${item.name}，数量：${obj_in[key]}${item.unit}，单价：${item.price.toFixed(2)}(元)，小计：${onefree_price.toFixed(2)}(元)\n`
                }
                else{
                    //非优惠商品
                    let onefree_price= item.price * (obj_in[key]) ; 
                    pay += onefree_price ;
                    str_pay +=  `名称：${item.name}，数量：${obj_in[key]}${item.unit}，单价：${item.price.toFixed(2)}(元)，小计：${onefree_price.toFixed(2)}(元)\n`
                }
            }
        }
    }
    str_arr.push(str_pay);
    str_arr.push(str_pro);
    str_arr.push(pay.toFixed(2)) ;
    str_arr.push(pro_pay.toFixed(2));
    return str_arr ;
}

module.exports = function printInventory(inputs){
    let allItems =Item.loadAllItems();
    //loadAllItems方法获取全部的商品，该方法返回结果为一个包含了商品对象的数组
    let promotions = Item.loadPromotions()[0].barcodes;
    //loadPromotions方法获取全部的促销信息，该方法返回结果为一个包含有促销信息对象的数组

    let obj = obj(inputs);
    //条形码
    let obj_promotion = obj_promotions(obj,promotions);
    //优惠商品

    let arr = str_shop(obj,allItems,obj_promotion);
    let str = '***<没钱赚商店>购物清单***\n' 
    +arr[0]+'----------------------\n' +
    '挥泪赠送商品：\n' +
    arr[1]+'----------------------\n' +
    '总计：${arr[2]}(元)\n' +
    '节省：${arr[3]}(元)\n' +
    '**********************';
    console.log(str) ;
    return 0;
}

// function printInventory(inputs){
//     let items = countItemsNum(inputs);
//     let pay = 0;
//     let pro_pay = 0;
//     let promotionItems = new Array();
//     let result = '***<没钱赚商店>购物清单***\n';
//     for (let i in items) {
//         let item = items[i];
//         result += '名称：' + getItemName(item.code) + '，数量：' + item.num + getItemUnit(item.code) + '，单价：'
//             + toDecimal(getItemPrice(item.code)) + '(元)，小计：' + toDecimal(calculationPrice(item.code, item.num)) + '(元)\n';
//         pay += calculationPrice(item.code, item.num);
//         promotionItems.push({'code': item.code, 'num': calculationPromotionNum(item.code, item.num)})
//     }
//     result += '----------------------\n';
//     result += '挥泪赠送商品：\n';
//     for (let j in promotionItems) {
//         let promotionItem = promotionItems[j];
//         if (promotionItem.num == 0)
//             continue;
//         result += '名称：' + getItemName(promotionItem.code) + '，数量：' + promotionItem.num + getItemUnit(promotionItem.code) + '\n';
//         pro_pay += promotionItem.num * getItemPrice(promotionItem.code);
//     }
//     result += '----------------------\n';
//     result += '总计：' + toDecimal(pay) + '(元)\n';
//     result += '节省：' + toDecimal(pro_pay) + '(元)\n';
//     result += '**********************';
//     console.log(result);
// }

// //统计所有商品数量
// function countItemsNum(inputs) {
//     let items = new Array();
//     for (let item in inputs) {
//         if (inputs[item].indexOf('-') != -1) {
//             let itemArr = inputs[item].split('-');
//             let code = itemArr[0];
//             let num = itemArr[1];
//             if (isExistItem(items, code))
//                 addItemCount(items, code, num);
//             else
//                 items.push({'code': code, 'num': num});
//         } else {
//             if (isExistItem(items, inputs[item]))
//                 addItemCount(items, inputs[item], 1);
//             else
//                 items.push({'code': inputs[item], 'num': 1});
//         }
//     }
//     return items;
// }

// //如果数组已存在，则给其对应项增加相应数量
// function addItemCount(items, code, num) {
//     for (let i in items) {
//         if (items[i].code == code)
//             items[i].num += num;
//     }
// }

// //判断数组中是否已存在对应项
// function isExistItem(items, code) {
//     for (let i in items) {
//         if (items[i].code == code)
//             return true;
//     }
//     return false;
// }

// //计算商品小计
// function calculationPrice(code, num) {
//     if (isPromotion(code)) {
//         let i = parseInt(num / 3);
//         let j = num % 3;
//         return (i * 2 + j) * getItemPrice(code);
//     }
//     return parseInt(num) * getItemPrice(code);
// }

// // 计算促销数量
// function calculationPromotionNum(code, num) {
//     if (isPromotion(code)) {
//         let i = parseInt(num / 3);
//         let j = num % 3;
//         return num - (i * 2 + j);
//     }
//     return 0;
// }

// //判断商品是否促销
// function isPromotion(code) {
//     let promotions = datbase.loadPromotions();
//     for (let promotion in promotions) {
//         if (promotions[promotion].type == 'BUY_TWO_GET_ONE_FREE') {
//             for (let promotionCode in promotions[promotion].barcodes) {
//                 if (promotions[promotion].barcodes[promotionCode] == code)
//                     return true;
//             }
//         }
//     }
//     return false;
// }

// //获取商品单价
// function getItemPrice(code) {
//     let allItems = datbase.loadAllItems();
//     for (let item in allItems) {
//         if (allItems[item].barcode == code)
//             return allItems[item].price;
//     }
//     return null;
// }

// //获取商品名称
// function getItemName(code) {
//     let allItems = datbase.loadAllItems();
//     for (let item in allItems) {
//         if (allItems[item].barcode == code)
//             return allItems[item].name;
//     }
//     return null;
// }

// // 获取商品单位
// function getItemUnit(code) {
//     let allItems = datbase.loadAllItems();
//     for (let item in allItems) {
//         if (allItems[item].barcode == code)
//             return allItems[item].unit;
//     }
//     return null;
// }

// //将数字保留两位小数
// function toDecimal(x) {
//     let f = parseFloat(x);
//     if (isNaN(f)) {
//         return false;
//     }
//     let f = Math.round(x * 100) / 100;
//     let s = f.toString();
//     let rs = s.indexOf('.');
//     if (rs < 0) {
//         rs = s.length;
//         s += '.';
//     }
//     while (s.length <= rs + 2) {
//         s += '0';
//     }
//     return s;
// }

// exports.printInventory = printInventory;